from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class TestListIn(BaseModel):
    """测试列表参数"""
    sex: Union[int, None, EmptyStrToNone] = Query()  # 性别
    name: Union[str, None, EmptyStrToNone] = Query()  # 名称
    sort: Union[int, None, EmptyStrToNone] = Query()  # 排序
    is_show: Union[int, None, EmptyStrToNone] = Query()  # 是否显示: 0=否, 1=是


class TestExportIn(TestListIn):  
    """测试导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class TestDetailIn(BaseModel):
    """测试详情参数"""
    id: int = Query(gt=0)  # 主键


class TestAddIn(BaseModel):
    """测试新增参数"""
    sex: int  # 性别
    name: str  # 名称
    sort: int  # 排序
    is_show: int  # 是否显示: 0=否, 1=是


class TestEditIn(BaseModel):
    """测试编辑参数"""
    id: int = Field(gt=0)  # 主键
    sex: int  # 性别
    name: str  # 名称
    sort: int  # 排序
    is_show: int  # 是否显示: 0=否, 1=是


class TestDelIn(BaseModel):
    """测试删除参数"""
    id: int = Field(gt=0)  # 主键


class TestOut(BaseModel):
    """测试返回信息"""
    id: int  # 主键
    sex: int  # 性别
    name: str  # 名称
    sort: int  # 排序
    is_show: int  # 是否显示: 0=否, 1=是
    create_time: Optional[int]  # 创建时间
    update_time: Optional[int]  # 更新时间

    class Config:
        orm_mode = True
